﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Itau.ST.Log;

namespace NK_Atualiza_Duration.Util
{
   
    public static class Log
    {
        // Usado para o Novo FunctionsLog
        static public ClsBatch objLog;
        static public int logCodigoErro = 999;
        static public int logCodigoInfo = 0;
        static public int logCodigoAviso = 900;
        public static ClsBatch.enum_TipoLogBatch logTipo;
        public static string nome_Rtna { get; set; }

        /// <summary>
        /// Pega um instância da Classe ClsBath resposável por gerar os Logs
        /// </summary>
        /// <returns></returns>
        private static ClsBatch getInstance ()
        {
            if (objLog == null) 
            {
                objLog = new ClsBatch();
            }
            return objLog;
        }

        /// <summary>
        /// Nome da rotina para ser gravado no Log
        /// </summary>
        /// <param name="strRotina"></param>
        public static void IniciaLog(string strRotina) 
        {
            getInstance();
            objLog.IniciarLog(strRotina, strRotina);
        }

        /// <summary>
        /// Função para gravar os dados no Log  
        /// </summary>
        /// <param name="tipo">Tipo I informação, A Aviso, E Erro, Defaul Info</param>
        /// <param name="mensagem">Mensagem para gravar no Log</param>
        public static void GravarLog(string tipo, string mensagem)
        {
            getInstance();
            string logCodigo = string.Empty;
            switch (tipo)
            {
                case "I":
                    logCodigoInfo = logCodigoInfo + 1;
                    logCodigo = logCodigoInfo.ToString("000");
                    logTipo = ClsBatch.enum_TipoLogBatch.tipoLog_info;
                    break;
                case "A":
                    logCodigoAviso = logCodigoAviso + 1;
                    logCodigo = logCodigoAviso.ToString("000");
                    logTipo = ClsBatch.enum_TipoLogBatch.tipoLog_aviso;
                    break;
                case "E":
                    logCodigoErro = logCodigoErro = 999;
                    logCodigo = logCodigoErro.ToString("000");
                    logTipo = ClsBatch.enum_TipoLogBatch.tipoLog_erro;
                    break;
                default:
                    logCodigoInfo = logCodigoInfo + 1;
                    logCodigo = logCodigoInfo.ToString("000");
                    logTipo = ClsBatch.enum_TipoLogBatch.tipoLog_info;
                    break;
            }
            objLog.GravarLog(logCodigo, logTipo, mensagem);
            Console.WriteLine(mensagem);

        }

        /// <summary>
        /// Finaliza o arquivo log
        /// </summary>
        /// <param name="eFechamento"></param>
        public static void finalizaLog(ClsBatch.enum_TipoFimLogBatch eFechamento)
        {
            getInstance();
            switch(eFechamento)
            {
                case ClsBatch.enum_TipoFimLogBatch.tipoFimLog_normal:
                    { 
                        objLog.FinalizarLog(ClsBatch.enum_TipoFimLogBatch.tipoFimLog_normal);
                    }
                    break;
                default :
                    {
                        objLog.FinalizarLog(ClsBatch.enum_TipoFimLogBatch.tipoFimLog_erro);
                        System.Environment.Exit(-1);
                    }
                    break;
            }
            
        }


    }
}
